package org.asiainfo.flowable.service;

import org.asiainfo.common.mybatis.stream.core.page.PageQuery;
import org.asiainfo.common.mybatis.stream.core.page.TableDataInfo;
import org.asiainfo.flowable.domain.bo.WfModelBo;
import org.asiainfo.flowable.domain.vo.WfModelVo;

import java.util.Collection;

/**
 * 流程模型管理Service接口
 *
 * @author dotor-ww
 */
public interface WfModelService {

    /**
     * 分页查询流程模型
     *
     * @param wfModelBo 流程模型对象
     * @param pageQuery 分页
     * @return 流程模型
     */
    TableDataInfo<WfModelVo> queryPageList(WfModelBo wfModelBo, PageQuery pageQuery);

    /**
     * 分页查询流程模型历史
     *
     * @param wfModelBo 流程模型对象
     * @param pageQuery 分页
     * @return 历史流程模型
     */
    TableDataInfo<WfModelVo> historyList(WfModelBo wfModelBo, PageQuery pageQuery);

    /**
     * 查询流程模型详细信息
     *
     * @param modelId 流程模型ID
     * @return 流程模型
     */
    WfModelVo queryById(String modelId);

    /**
     * 获取流程模型表单数据
     *
     * @param modelId 流程模型ID
     * @return 流程模型表单数据
     */
    String queryBpmnXmlById(String modelId);

    /**
     * 新增流程模型
     *
     * @param wfModelBo 流程模型对象
     */
    void insertByBo(WfModelBo wfModelBo);

    /**
     * 修改流程模型
     *
     * @param wfModelBo 流程模型对象
     */
    void updateByBo(WfModelBo wfModelBo);

    /**
     * 保存流程模型
     *
     * @param wfModelBo 流程模型对象
     */
    void save(WfModelBo wfModelBo);

    /**
     * 删除流程模型
     *
     * @param modelIds 流程模型ID集合
     */
    void deleteWithValidByIds(Collection<String> modelIds);

    /**
     * 设置流程模型为最新
     *
     * @param modelId 流程模型ID
     */
    void latestModel(String modelId);

    /**
     * 部署流程模型
     *
     * @param modelId 流程模型ID
     * @return 部署结果
     */
    Boolean deployModel(String modelId);
}
